/**
 * 全局事件管理器使用示例
 * 这个文件展示了如何在项目中使用全局事件管理器
 */

import { EventManager, EVENT_NAMES } from './eventManager';
import { PlatformUtils, emitHospitalChangeEvent } from './channel';

/**
 * 示例1：基本的事件发布和订阅
 */
export function basicEventExample() {
    // 订阅事件
    EventManager.on('userAction', (data) => {
        // 用户执行了操作
    });

    // 发布事件
    EventManager.emit('userAction', { action: 'click', target: 'button' });
}

/**
 * 示例2：一次性事件监听
 */
export function onceEventExample() {
    // 只执行一次的事件监听
    EventManager.once('appInitialized', (data) => {
        // 执行初始化后的逻辑
    });

    // 发布事件（只会执行一次）
    EventManager.emit('appInitialized', { version: '1.0.0' });
    EventManager.emit('appInitialized', { version: '1.0.1' }); // 不会执行
}

/**
 * 示例3：医院变化事件监听
 */
export function hospitalChangeExample() {
    // 监听医院变化
    EventManager.on(EVENT_NAMES.HOSPITAL_CHANGE, (hospital) => {
        // 重新加载相关数据
        reloadHospitalData(hospital);
    });

    // 监听系统机构变化
    EventManager.on(EVENT_NAMES.SYS_ORG_CHANGE, (data) => {
        // 更新UI显示
        updateUI(data);
    });

    // 手动触发医院变化事件
    emitHospitalChangeEvent();
}

/**
 * 示例4：用户登录事件
 */
export function userLoginExample() {
    // 监听用户登录（只执行一次）
    EventManager.once(EVENT_NAMES.USER_LOGIN, (user) => {
        // 初始化用户相关数据
        initUserData(user);
    });

    // 模拟用户登录
    EventManager.emit(EVENT_NAMES.USER_LOGIN, {
        id: '123',
        name: '张三',
        phone: '13800138000'
    });
}

/**
 * 示例5：健康码更新事件
 */
export function healthCodeExample() {
    // 监听健康码更新
    EventManager.on(EVENT_NAMES.HEALTH_CODE_UPDATE, (data) => {
        // 刷新健康码显示
        refreshHealthCode(data);
    });

    // 发布健康码更新事件
    EventManager.emit(EVENT_NAMES.HEALTH_CODE_UPDATE, {
        code: 'green',
        updateTime: new Date().toISOString()
    });
}

/**
 * 示例6：订单状态变化事件
 */
export function orderStatusExample() {
    // 监听订单状态变化
    EventManager.on(EVENT_NAMES.ORDER_STATUS_CHANGE, (order) => {
        // 更新订单列表
        updateOrderList(order);
    });

    // 发布订单状态变化事件
    EventManager.emit(EVENT_NAMES.ORDER_STATUS_CHANGE, {
        orderId: 'ORDER123',
        status: 'paid',
        updateTime: new Date().toISOString()
    });
}

/**
 * 示例7：网络状态变化事件
 */
export function networkChangeExample() {
    // 监听网络状态变化
    EventManager.on(EVENT_NAMES.NETWORK_CHANGE, (networkInfo) => {
        if (networkInfo.isConnected) {
            // 网络恢复，重新同步数据
            syncData();
        } else {
            // 网络断开，显示离线提示
            showOfflineMessage();
        }
    });

    // 模拟网络状态变化
    EventManager.emit(EVENT_NAMES.NETWORK_CHANGE, {
        isConnected: false,
        type: 'wifi'
    });
}

/**
 * 示例8：事件统计和调试
 */
export function eventStatsExample() {
    // 获取事件统计信息
    const stats = EventManager.getStats();

    // 获取所有事件名称
    const eventNames = EventManager.getEventNames();

    // 获取特定事件的监听器数量
    const hospitalChangeCount = EventManager.getListenerCount(EVENT_NAMES.HOSPITAL_CHANGE);
}

/**
 * 示例9：清理事件监听器
 */
export function cleanupExample() {
    const callback = (data: any) => {
        // 收到事件
    };

    // 添加监听器
    EventManager.on('testEvent', callback);

    // 移除特定监听器
    EventManager.off('testEvent', callback);

    // 移除所有监听器
    EventManager.off('testEvent');

    // 清除所有事件
    EventManager.clear();
}

// 辅助函数
function reloadHospitalData(hospital: any) {
    // 重新加载医院数据
}

function updateUI(data: any) {
    // 更新UI
}

function initUserData(user: any) {
    // 初始化用户数据
}

function refreshHealthCode(data: any) {
    // 刷新健康码
}

function updateOrderList(order: any) {
    // 更新订单列表
}

function syncData() {
    // 同步数据
}

function showOfflineMessage() {
    // 显示离线提示
}

/**
 * 在Vue组件中使用示例：
 * 
 * // 在 setup 中使用
 * import { useHospitalChangeListener, useUserLoginListener } from '@/composables/useEventManager';
 * 
 * // 监听医院变化
 * const { subscribe: subscribeHospital } = useHospitalChangeListener((data) => {
 *     // 重新加载数据
 *     loadData();
 * });
 * 
 * // 监听用户登录（只执行一次）
 * const { subscribe: subscribeLogin } = useUserLoginListener((user) => {
 *     // 初始化数据
 *     initData();
 * }, true);
 * 
 * // 手动发布事件
 * import { EventManager, EVENT_NAMES } from '@/utils/eventManager';
 * EventManager.emit(EVENT_NAMES.CUSTOM_EVENT, { message: 'Hello' });
 */
